# 读取关卡信息
# 关卡信息存放于 box.idx  （idx是字幕文件类型？）

# 每个关卡的数据
# 1.先查询目录 找出需要查询寻的关卡在目录中的位置      # 注意 目录中每一关对应的地图信息所在位置按照四位形式依次存放
# 2.通过关卡目录查出对应关卡地图信息所在的地址
# 3.让指针跳转到查询到的关卡信息的地址               #地图信息 1.2两位是人物初始位置 4.5是地图大小 后面（地图大小）是相应的地图详细信息
# 4.依次读取地图信息

# 打开文件
f = open('box.idx','rb')
# 用户输入关卡
round = int(input("请输入第几关："))
# 计算所给关数在目录中的地址（位置）
address = (round-1)*4
print(f'目录中关卡位置：{address}')
# 移动指针到目录中对应关卡的初始位置
f.seek(address,0)
# 读取4个字节 即读取目录中对应关卡的地图信息的地址
bytes = f.read(4)
address = int.from_bytes(bytes,byteorder='big',signed=False)    #将 读取到的四位二进制数转换成相应的整数 且二进制数以大端序读取 signed是看正负号的
print(f'关卡数据位置：{address}')
###  以上是通过目录找到对应关卡地图信息存放的位置

# 移动读写位置  （即将指针移动到对应关卡地图信息所在位置）
f.seek(address,0)
# 读取关卡地图信息
bytes = f.read(1)
x = int.from_bytes(bytes,byteorder='big',signed=False)
bytes = f.read(1)
y = int.from_bytes(bytes,byteorder='big',signed=False)
### 以上x y是获得了人物在地图中的位置信息
bytes = f.read(1)
pass
# 这里需要跳过一个存储信息
bytes = f.read(1)
length = int.from_bytes(bytes,byteorder='big',signed=False)    # 读取的是地图的长是多少
bytes = f.read(1)
width = int.from_bytes(bytes,byteorder='big',signed=False)     # 读取的是地图的宽是多少

for i in range(0,width):
    for j in range(0,length):
        bytes = f.read(1)
        data = int.from_bytes(bytes,byteorder='big',signed=False)
        if data==0:
            print(' ',end=' ')
        elif data==1:                             # 1.代表墙壁
            print('▇',end=" ")
        elif data==2:                             # 2.代表地板
            print(' ',end=" ")
        elif data==3:                             # 3.代表目标
            print('○',end="")
        elif data==4:                             # 4.代表箱子
            print('□',end='')
    print()

print(f'人物的起始位置：{x},{y}.地图大小：{length}*{width}')

f.close()


